using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Collections;

public class DreamTherapy : MonoBehaviour
{
    public Button startButton; // 开始按钮
    public Text storyText; // 显示剧情文本的 UI
    public Image fadeOverlay; // 用于屏幕淡出的黑色覆盖层
    private string fullText = "这里是? 医...院?        \n \n我想起来了，一直以来我都在接受心理治疗。  \n \n这就是全新的梦境疗法吗?         \n \n一切都是那么的真实，但是.......";
    private string currentText = "";
    private bool canProceedToNextScene = false; // 标记是否可以进入下一场景

    void Start()
    {
        // 初始化：绑定按钮事件，隐藏文本，设置遮罩透明度
        startButton.onClick.AddListener(OnStartButtonClicked);
        storyText.text = ""; // 初始化文本为空
        fadeOverlay.color = new Color(0, 0, 0, 0); // 遮罩初始透明
    }

    void Update()
    {
        // 如果文字生成完成并检测到屏幕点击，切换到下一个场景
        if (canProceedToNextScene && Input.GetMouseButtonDown(0))
        {
            LoadNextScene();
        }
    }

    public void OnStartButtonClicked()
    {
        // 禁用按钮，防止重复点击
        startButton.interactable = false;

        // 隐藏按钮对象
        startButton.gameObject.SetActive(false);

        // 启动场景淡出和文字显示逻辑
        StartCoroutine(FadeOutAndDisplayText());
    }

    IEnumerator FadeOutAndDisplayText()
    {
        // 1. 场景在 1 秒内逐渐变黑
        float duration = 1f;
        float elapsed = 0f;
        while (elapsed < duration)
        {
            elapsed += Time.deltaTime;
            float alpha = Mathf.Clamp01(elapsed / duration);
            fadeOverlay.color = new Color(0, 0, 0, alpha); // 更新遮罩透明度
            yield return null;
        }

        // 2. 等待 2 秒（总计 3 秒后开始显示文字）
        yield return new WaitForSeconds(2f);

        // 3. 开始逐字显示文字
        StartCoroutine(DisplayText());
    }

    IEnumerator DisplayText()
    {
        foreach (char c in fullText)
        {
            currentText += c;
            storyText.text = currentText;
            yield return new WaitForSeconds(0.05f); // 控制文字显示速度
        }

        // 文字显示完成后，允许玩家点击进入下一场景
        canProceedToNextScene = true;
    }

    void LoadNextScene()
    {
        // 加载名为 "Scene1" 的场景
        SceneManager.LoadScene("Scene1");
    }
}
